package sortingAlgorithm;

import java.util.Arrays;
import java.util.Random;

/*排序的核心就是对比(compareCount)与换位(swapCount)
    冒泡排序
        反复对比相邻的两个元素，如果与预期的顺序不符，则换位
*/
public class BubbleSort {
    public static void main(String[] args) {
        //创建需要排序的数组对象
        //int[] array1 = {8, 7, 6, 5, 4, 3, 2, 1, 0};
        Random r = new Random();
        //将生成的随机的数值大小上限
        int numberBound = 100;
        //将生成的随机数的数量，也是数组的长度
        int numbersCount = 500;
        //创建数组，数组长度就是将生成的随机数的数量
        int[] array1 = new int[numbersCount];
        for (int i = 0; i < array1.length; i++) {
            //生成随机数，作为当前遍历到的数组元素的值
            array1[i] = r.nextInt(numberBound);
        }

        int compareCount = 0;
        int swapCount = 0;

        //记录排序之前的时间值
        long startTime = System.currentTimeMillis();
        //遍历数组
        //循环变量j：某元素的下标，将始终与下标为j+1的元素进行对比
        //数组最右侧元素没有对比的对象
        for (int i = 0; i < array1.length - 1; i++) {
            for (int j = 0; j < array1.length - i - 1; j++) {
                //对比次数自增
                compareCount++;
                //如果左侧元素更大，则换位
                if (array1[j] > array1[j + 1]) {
                    int temp = array1[j + 1];
                    array1[j + 1] = array1[j];
                    array1[j] = temp;
                    //换位次数自增
                    swapCount++;
                }
            }
            //输出显示数组
//            System.out.println(Arrays.toString(array1));
        }
        //记录排序之后的时间值
        long endTime = System.currentTimeMillis();
        //输出结果
        System.out.println("对比次数" + compareCount);
        System.out.println("换位次数" + swapCount);
        System.out.println("耗时：" + (endTime - startTime) + "毫秒");
    }
}
